/*
*
* 标签相关接口
*/
const express = require('express');
const router = express.Router();
const passport = require('passport');

const Tags = require('../../models/Tags');
const ArticleList = require('../../models/ArticleList');


//$rote GET api/tags
// @desc 返回请求的json数据
// @access public
router.get('/',(req,res)=>{
    res.send (`
/**
*   [post] /add
*   param:{
*       tag:标签（必填）
*       upuserId:用户的id （必填）
*       createTime:创建时间  默认有时间
*       updateTime：更新时间  默认有时间
*   }
*/  
/***
 * [delete] delete/:id
 *  status : true  成功  false 失败
 */
 /***
 
 * [get] find
 * 分页查询
 * userId 必填
 * id，page，rows ，id是标签的id，选填，page，rows不选查询用户的所有的标签
 *返回状态 status：0 参数缺失 1 数据查询不到 2 成功获取   根据更新时间降序
 * @access private
 */
 /***
 * [post] edit/:id
 * userId 必填
 * tag，userId
 * @access private
 */
    `)
});

router.post('/add',passport.authenticate('jwt',{session:false}),(req,res)=>{
    const tagsFiles = {};
    if(req.body.tag) tagsFiles.tag = req.body.tag;
    if(req.body.userId) tagsFiles.userId = req.body.userId;
    new Tags(tagsFiles).save().then(like => {
        res.json(like)
    }).catch(err=>res.status(400).json(err))
});

router.delete('/delete/:id',passport.authenticate('jwt',{session:false}),(req,res)=>{
    Tags.findOneAndRemove({_id:req.params.id}).then(tag=>{
        tag.save().then(tag=>res.json({msg:'删除成功!',status:true}))
    }).catch(err=>res.json({msg:'删除失败!',status:false}))
});

/***
 * 编辑标签
 */
router.post('/edit/:id',passport.authenticate('jwt',{session:false}),(req,res)=>{
    const tagsFiles = {};
    if(req.body.tag) tagsFiles.tag = req.body.tag;
    if(req.body.userId) tagsFiles.userId = req.body.userId;
    tagsFiles.updateTime = Date.now();

    Tags.findOneAndUpdate(
        {_id:req.params.id},
        { $set: tagsFiles },
        {new:true}
    ).then(tag => res.json(tag))
});

/***
 * 分页查询
 * userId 必填
 * id，page，rows ，id是标签的id，选填，不选查询用户的所有的标签
 * @access private
 */
router.get('/find',passport.authenticate('jwt',{session:false}),(req,res)=>{
    let userObj = {};
    if(req.query.userId){
        userObj['userId']=req.query.userId
    } else {
        return res.status(404).json({status:0,msg:"参数缺失"})
    }

    if(req.query.id) userObj['_id']=req.query.id;
    
    //有分页参数
    if(req.query.page && req.query.rows && req.query.page !='' && req.query.rows !=''){
        let page = parseInt(req.query.page) === 0 ? 1:parseInt(req.query.page);
        let rows = parseInt(req.query.rows);
        let count=0;
        let skip=0;
        let limit = 0;
        if(page <= 1){
            skip =0;
        } else {
            skip = rows*page - rows
        }
        Tags.find(userObj).then(tags=> {
            if(!tags){
                tags.length = 0;
            }
            count = tags.length;
        }).then(()=>{
            //总页数 大于当前页数
            if(Math.ceil(count/rows) >= page){
                if(Math.ceil(count/rows) == page){
                    limit = count
                } else {
                    limit = parseInt(rows)
                }
            } else {
                return res.status(401).json({
                    data:null,
                    msg:'查询不到数据',
                    status:1,
                });
            }
            Tags.find(userObj).skip(skip).limit(limit).sort({updateTime:-1}).then(pageTag=>{
                if(!pageTag){
                    return res.status(200).json({
                        data:[],
                        total:0,
                        page:page,
                        status:2,
                    });
                }
                res.json({
                    data:pageTag,
                    total:count,
                    page:page,
                    status:2,
                })
            }).catch(err=>console.log(err))
        })
    } else {
        Tags.find(userObj).sort({updateTime:-1}).then(tags=> {
            if(!tags){
                return res.status(404).json({
                    msg:'查询不到数据',
                    status:1,
                });
            }
            res.json({
                data:tags,
                status:2
            })
        }).catch(err=>console.log(err))
    }




});
module.exports = router;
